'use strict'

/**
 * * Cookie 通过在客户端记录信息确认用户身份，Session通过在服务端记录信息确定用户身份
 * * Cookie:客户端存储的一种方案
 * * session: 保存在服务器中，每次客户端发起请求时，通过携带的Cookie值（即为session文件的名字）
 * * 判断用户是否已经进行过登录
 * * 发送的内容可以存储再c盘中，用户——>公用——>sess里的文件里，请求消息头里的Cookie值即为文件名
 * * 通过Cookie值找到文件
 */

const titbit=require('titbit');
const {cookie,session}=require('titbit-toolkit');

const app=new titbit({
    debug:true
})

app.use(async (c,next)=>{
    //* c.query 是从url的查询字符串解析过来的
    if(c.query.key!=='12345'){
        return c.status(403).send('deny');
    }
    await next(); //* 下一个中间件传输。 不写这个会终止不执行下一步
    
},{group:'session'})//*指明这个中间件只针对group为session的路由执行

// * 按顺序执行
app.use(async(c,next)=>{
    console.log('time start') //*洋葱模型执行顺序 time start——home start—home end—2ms
    let startTime=Date.now();
    await next();
    let endTime=Date.now();
    console.log(endTime-startTime,'ms');
})

//! 启用Cookie，     启用session 
app.use(new cookie).use(new session)

app.use(async(c,next)=>{
    console.log('home start');
    await next();
    console.log('home end');
},{group:'home',method:['GET']});//*满足 home分组，get请求 才会执行

app.get('/',async c=>{
    c.send('ok');
},{name:'主页',group:'home'});

app.get('/sess/:x/:y',async c=>{
    c.setSession('x',c.param.x)
    c.setSession('y',c.param.y)

    c.send(c.getSession())
},{group:'session'});//* 实现 key值检验与session路由绑在一起

app.run(1235)
//! 小程序里面调用wx.login 成功之后，返回code
//! 然后wx.request请求开发者服务器，
//! 开发者服务器 请求 微信服务器授权
//! 微信服务器给开发者服务器 openid 